package org.ivwsqii.command.example.test;

import org.ivwsqii.command.example.*;

/**
 * 	小女孩茱丽(Julia)有一个盒式录音机，此录音机有播音(Play)、倒带(Rewind)和停止(Stop)功能，
 * 	录音机的键盘便是请求者(Invoker)角色；茱丽(Julia)是客户端角色，而录音机便是接收者角色。
 *  Command类扮演抽象命令角色，而PlayCommand、StopCommand和RewindCommand便是具体命令类。
 * 	茱丽(Julia)不需要知道播音(play)、倒带(rewind)和停止(stop)功能是怎么具体执行的，
 * 	这些命令执行的细节全都由键盘(Keypad)具体实施。茱丽(Julia)只需要在键盘上按下相应的键便可以了。
 * @author wyl
 *	2019年3月30日
 */
public class Clinet {

	public static void main(String[] args) {
		//创建接受者
		AudioPlayer player = new AudioPlayer();
		//创建命令对象，给接收者设置命令
		Command playCommand = new PlayCommand(player);
		Command rewindCommand = new RewindCommand(player);
		Command stopCommand = new StopCommand(player);
		//创建请求者，添加命令
		KeyPad keyPad = new KeyPad();
		keyPad.setPlayCommadn(playCommand);
		keyPad.setRewindCommadn(rewindCommand);
		keyPad.setStopCommadn(stopCommand);
		//执行请求
		keyPad.play();
		keyPad.rewind();
		keyPad.stop();
		System.out.println("---------------------------------");
		MacroCommand command = new MacroAudioCommand();
		command.add(stopCommand);
		command.add(playCommand);
		command.add(rewindCommand);
		command.add(stopCommand);
		command.execute();
		command.remove(stopCommand);
		command.execute();
	}
}
